// 装备锻造系统
program EquipmentForge;
type
TEquipment = record
Name: string;
Quality: Integer; // 1=普通 2=精良 3=史诗 4=传说 5=神器
Star: Integer; // 0-15星
BaseAttack: Integer;
BaseDefense: Integer;
ForgeLevel: Integer; // 强化等级 0-20
end;
const
QUALITY_NAMES: array[1..5] of string =
('普通', '精良', '史诗', '传说', '神器');
function GetQualityColor(Quality: Integer): string;
begin
case Quality of
1: Result := '?';
2: Result := '????';
3: Result := '????';
4: Result := '????';
5: Result := '????';
else Result := '?';
end;
end;
function GetTotalAttack(Equip: TEquipment): Integer;
var
QualityBonus, StarBonus, ForgeBonus: Real;
begin
QualityBonus := 1.0 + (Equip.Quality - 1) * 0.3;
StarBonus := 1.0 + (Equip.Star * 0.08);
ForgeBonus := 1.0 + (Equip.ForgeLevel * 0.05);
Result := Round(Equip.BaseAttack * QualityBonus * StarBonus * ForgeBonus);
end;
procedure ShowEquipment(Equip: TEquipment);
begin
Writeln('═════════════════════════════════');
Writeln(' ', GetQualityColor(Equip.Quality), ' [', QUALITY_NAMES[Equip.Quality], '] ', Equip.Name);
Writeln(' 星级:', Equip.Star, '/15 ?');
Writeln(' 强化:+', Equip.ForgeLevel, '/20');
Writeln(' 基础攻击:', Equip.BaseAttack);
Writeln(' 基础防御:', Equip.BaseDefense);
Writeln(' 最终攻击:', GetTotalAttack(Equip));
Writeln('═════════════════════════════════');
end;
procedure ForgeEquipment(var Equip: TEquipment);
var
SuccessRate, Roll: Integer;
CritForge: Boolean;
begin
if Equip.ForgeLevel >= 20 then
begin
Writeln('? 已达最高强化等级!');
Exit;
end;
// 成功率随等级下降
SuccessRate := 100 - (Equip.ForgeLevel * 4);
if SuccessRate < 10 then SuccessRate := 10;
Roll := Random(100) + 1;
Writeln('???? 正在强化 ', Equip.Name, ' +', Equip.ForgeLevel, ' → +', Equip.ForgeLevel + 1);
Writeln(' 成功率:', SuccessRate, '%');
if Roll <= SuccessRate then
begin
Inc(Equip.ForgeLevel);
// 暴击锻造判定 (5%概率)
CritForge := (Random(100) + 1) <= 5;
if CritForge then
begin
Inc(Equip.ForgeLevel);
Writeln(' ???? 暴击锻造!直接提升2级!');
end;
Writeln(' ? 强化成功!当前 +', Equip.ForgeLevel);
end
else
begin
Writeln(' ? 强化失败!');
if Equip.ForgeLevel >= 10 then
begin
Dec(Equip.ForgeLevel);
Writeln(' ?? 等级下降!当前 +', Equip.ForgeLevel);
end;
end;
end;
procedure StarUpgrade(var Equip: TEquipment);
var
SuccessRate, Roll: Integer;
begin
if Equip.Star >= 15 then
begin
Writeln('? 已达最高星级!');
Exit;
end;
SuccessRate := 80 - (Equip.Star * 4);
if SuccessRate < 5 then SuccessRate := 5;
Roll := Random(100) + 1;
Writeln('? 升星 ', Equip.Name, ' ', Equip.Star, '星 → ', Equip.Star + 1, '星');
Writeln(' 成功率:', SuccessRate, '%');
if Roll <= SuccessRate then
begin
Inc(Equip.Star);
Writeln(' ? 升星成功!当前 ', Equip.Star, '星');
end
else
Writeln(' ? 升星失败,星级不变');
end;
procedure QualityUpgrade(var Equip: TEquipment);
var
Materials: array[1..3] of string;
i: Integer;
begin
if Equip.Quality >= 5 then
begin
Writeln('? 已是最高品质!');
Exit;
end;
Materials[1] := '玄铁×10';
Materials[2] := '灵魂宝石×5';
Materials[3] := '金币×' + IntToStr(Equip.Quality * 500000);
Writeln('???? 品质进阶:');
Writeln(' 当前:', QUALITY_NAMES[Equip.Quality]);
Writeln(' 目标:', QUALITY_NAMES[Equip.Quality + 1]);
Writeln(' 所需材料:');
for i := 1 to 3 do
Writeln(' - ', Materials[i]);
// 进阶成功率
if (Random(100) + 1) <= 60 then
begin
Inc(Equip.Quality);
Writeln(' ? 进阶成功!品质提升至 ', QUALITY_NAMES[Equip.Quality]);
end
else
Writeln(' ? 进阶失败,材料已消耗');
end;
var
Weapon: TEquipment;
i: Integer;
begin
Randomize;
// 初始化武器
Weapon.Name := '屠龙刀';
Weapon.Quality := 2;
Weapon.Star := 0;
Weapon.BaseAttack := 800;
Weapon.BaseDefense := 100;
Weapon.ForgeLevel := 0;
Writeln('╔═════════════════════════════════╗');
Writeln('║ 装备锻造 · 神兵合成系统 ║');
Writeln('╚═════════════════════════════════╝');
Writeln('');
ShowEquipment(Weapon);
Writeln('');
Writeln('--- 开始强化锻造 ---');
for i := 1 to 5 do
begin
Writeln('');
ForgeEquipment(Weapon);
ShowEquipment(Weapon);
end;
Writeln('');
Writeln('--- 升星系统 ---');
StarUpgrade(Weapon);
ShowEquipment(Weapon);
Writeln('');
Writeln('--- 品质进阶 ---');
QualityUpgrade(Weapon);
ShowEquipment(Weapon);
Writeln('');
Writeln('???? 最终装备状态:');
ShowEquipment(Weapon);
end.